package com.guicent.geekai.entity.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.List;
import java.util.Map;

/**
 * GeekAI 请求 DTO
 */
@Data
@ApiModel(description = "GeekAI 请求 DTO")
public class GeekAiRequestDTO {

    @ApiModelProperty(value = "模型")
    private String model;

    @ApiModelProperty(value = "消息列表")
    private List<MessageDTO> messages;

    @ApiModelProperty(value = "思考参数")
    private ThinkingDTO thinking;

    @ApiModelProperty(value = "是否流式传输")
    private boolean stream;

    @ApiModelProperty(value = "是否启用搜索")
    private boolean enable_search;

    @ApiModelProperty(value = "重试次数")
    private int retries;

    @ApiModelProperty(value = "温度")
    private double temperature;

    @ApiModelProperty(value = "最大完成令牌数")
    private int max_completion_tokens;

    @ApiModelProperty(value = "是否 JSON 模式")
    private boolean json_mode;

    @ApiModelProperty(value = "工具选择")
    private String tool_choice;

    @ApiModelProperty(value = "是否并行调用工具")
    private boolean parallel_tool_calls;

    @ApiModelProperty(value = "停止标记")
    private List<String> stop;

    @ApiModelProperty(value = "是否记录概率")
    private boolean logprobs;

    @ApiModelProperty(value = "最高记录概率数")
    private int top_logprobs;

    @ApiModelProperty(value = "频率惩罚")
    private int frequency_penalty;

    @ApiModelProperty(value = "存在惩罚")
    private int presence_penalty;

    @ApiModelProperty(value = "最高 P 值")
    private int top_p;

    @ApiModelProperty(value = "种子")
    private int seed;

    @ApiModelProperty(value = "生成数量")
    private int n;

    @ApiModelProperty(value = "元数据")
    private Map<String, Object> metadata;
}